package ar.com.sectorwine;

import java.util.ArrayList;
import java.util.List;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationListener;
import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import ar.com.sectorwine.entities.Authorities;
import ar.com.sectorwine.entities.Users;
import ar.com.sectorwine.repository.ParametrosDAO;
import ar.com.sectorwine.services.UsuarioService;

@Component
@Transactional(propagation = Propagation.REQUIRES_NEW)
public class Bootstrap implements ApplicationListener<ContextRefreshedEvent> {

	private static final Logger logger = LoggerFactory
			.getLogger(Bootstrap.class);

	@Autowired
	private ParametrosDAO parametrosDAO;
	
	@Autowired
	private UsuarioService usuarioService;
	
	@Override
	public void onApplicationEvent(ContextRefreshedEvent event) {

		logger.info("######## Application Event ########");
		List<String> list ;
		try {
			
			if (parametrosDAO.findParametro("variedades") == null) {
			
				list = new ArrayList<String>();
				list.add("Malbec");
				list.add("Merlot");

				parametrosDAO.agregar("variedades", list);
				
			}
			
			if (parametrosDAO.findParametro("zonas") == null) {
						
				list = new ArrayList<String>();
				list.add("primera zona");
				list.add("segunda zona");

				parametrosDAO.agregar("zonas", list);
			
			}
			
			if (parametrosDAO.findParametro("permisos") == null) {
					
				list = new ArrayList<String>();
				
				list.add("USUARIO");
				list.add("VENDEDOR");
				list.add("COMPRADOR");
				list.add("ADMINISTRADOR");

				parametrosDAO.agregar("permisos", list);
			
			}

			if(usuarioService.getUsuario("administrador") == null){
				
				Users usuario = new Users();
				
				Authorities defaultAuthoritie = new Authorities();
				defaultAuthoritie.setAuthority("ADMINISTRADOR");
				usuario.getAuthorities().add(defaultAuthoritie);
				usuario.setApellido("admin");
				usuario.setNombre("admin");
				usuario.setUsername("administrador");
				usuario.setPassword("p@ssw0rd123");
				usuario.setEmail("p@ssw0rd123");
				usuario.setTycAceptados(true);
				usuario.setEnabled(true);
				usuarioService.crearUsuario(usuario);
				usuarioService.confirmarRegistro(usuario.getNombre(), "");
				
			}
			
		} catch (Exception e) {
			logger.error(
					"Ocurrio un error al agregar los parametros por defecto. ",
					e);
			System.out.println("Ocurrio un error al agregar los parametros por defecto. ");
		}

	}

}